home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / Development Tools & Languages / Macintosh Common Lisp Related / interfaces / QuickTime™ 1.0 Interfaces / MoviesFormat.lisp < prev    next >
Encoding:
Text File  |  1993-09-16  |  11.5 KB  |  373 lines  |  [TEXT/CCL2]

  1. #|
  2. /************************************************************
  3.  
  4. Created: Wednesday, August 28, 1991 at 1:56 AM
  5.  MoviesFormat.h
  6.  C Interface to the Macintosh Libraries
  7.  
  8.  
  9.   Copyright Apple Computer, Inc. 1991
  10.   All rights reserved
  11.  
  12. ************************************************************/
  13. |#
  14.  
  15. (in-package :traps)
  16.  
  17. (require-interface 'Movies)
  18.  
  19. (defconstant $kMovieVersion 0)          ; /* version number of the format here described */
  20.  
  21. (defrecord MoviesUserData
  22.   (size :long)                          ; /* size of this user data */
  23.   (type :long)                          ; /* type of user data */
  24.   (data (array :character 1)))          ; /* the user data */
  25.  
  26. (defrecord UserDataAtom
  27.   (size    :long)
  28.   (type long)
  29.   (userData (array :MoviesUserData 1)))
  30.  
  31. #|
  32. /*
  33. struct SampleDescription {
  34.     long        size;
  35.     long        type;
  36.     long        resvd1;
  37.     short        resvdA;
  38.     short        dataRefBlobId;
  39.     };
  40. typedef struct SampleDescription SampleDescription;
  41. */
  42. |#
  43.  
  44. (defrecord SampleDescriptionAtom
  45.   (size :long)
  46.   (type :long)                           ; /* = 'stsd' */
  47.   (flags :long)                          ; /* 1 byte of version / 3 bytes of flags */
  48.   (numEntries :long)
  49.   (sampleDescTable (:array :SampleDescription 1)))
  50.  
  51. (defrecord TimeToSampleNum
  52.   (sampleCount :long)
  53.   (sampleDuration :TimeValue))
  54.  
  55. (defrecord TimeToSampleNumAtom
  56.   (size :long)
  57.   (type :long)                          ; /* = 'stts' */
  58.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  59.   (numEntries :long)
  60.   (timeToSampleNumTable (:array :TimeToSampleNum 1)))
  61.  
  62. (defrecord SyncSampleAtom
  63.   (size :long)
  64.   (type :long)                          ; /* = 'stss' */
  65.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  66.   (numEntries :long)
  67.   (syncSampleTable (:array :long 1)))
  68.  
  69. (defrecord SampleToChunk
  70.   (firstChunk :long)
  71.   (samplesPerChunk :long)
  72.   (sampleDescriptionID :long))
  73.  
  74. (defrecord SampleToChunkAtom
  75.   (size :long)
  76.   (type :long)                          ; /* = 'stsc' */
  77.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  78.   (numEntries :long)
  79.   (sampleToChunkTable (:array :SampleToChunk 1)))
  80.  
  81. (defrecord ChunkOffsetAtom
  82.   (size :long)
  83.   (type :long)                          ; /* = 'stco' */
  84.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  85.   (numEntries :long)
  86.   (chunkOffsetTable (:array :long 1)))
  87.  
  88. (defrecord SampleSizeAtom
  89.   (size :long)
  90.   (type :long)                          ; /* = 'stsz' */
  91.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  92.   (sampleSize :long)
  93.   (numEntries :long)
  94.   (sampleSizeTable (:array :long 1)))
  95.  
  96. (defrecord SampleTableAtom
  97.   (size :long)
  98.   (type :long)                          ; /* = 'stbl' */
  99.   (sampleDescription :SampleDescriptionAtom)
  100.   (timeToSampleNum :TimeToSampleNumAtom)
  101.   (sampleToChunk :SampleToChunkAtom)
  102.   (syncSample :SyncSampleAtom)
  103.   (sampleSize :SampleSizeAtom)
  104.   (chunkOffset :ChunkOffsetAtom))
  105.     
  106. (defrecord PublicHandlerInfo
  107.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  108.   (componentType :long)
  109.   (componentSubType :long)
  110.   (componentManufacturer :long)
  111.   (componentFlags :long)
  112.   (componentFlagsMask :long)
  113.   (componentName (:array :character 1)))
  114.     
  115. (defrecord HandlerAtom
  116.   (size :long)
  117.   (type :long)                          ; /* = 'hdlr' */
  118.   (hInfo :PublicHandlerInfo))
  119.     
  120. (defrecord DataRefAtom
  121.   (size :long)
  122.   (type :long)
  123.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags (contains the dataRef attributes) */
  124.   (dataRefData (:array :character 1)))  ; /* for the current data handlers, this is an alias */
  125.  
  126. (defrecord DataRefContainerAtom
  127.   (size :long)
  128.   (type :long)
  129.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  130.   (numEntries :long)
  131.   (dataRefs (:array :DataRefAtom 1)))
  132.  
  133. (defrecord DataInfoAtom
  134.   (size :long)
  135.   (type :long)                          ; /* = 'dinf' */
  136.   (dataRef :DataRefContainerAtom))
  137.  
  138. (defrecord MatteCompressedAtom
  139.   (size :long)
  140.   (type :long)
  141.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  142.   (matteImageDescription :ImageDescription)
  143.   (matteData (:array :character 1)))
  144.  
  145. (defrecord MatteAtom
  146.   (size :long)
  147.   (type :long)
  148.   (aCompressedMatte :MatteCompressedAtom))
  149.  
  150. (defrecord RgnAtom
  151.   (size :long)
  152.   (type :long)
  153.   (rgnSize :short)
  154.   (rgnBBox :Rect)
  155.   (data (:array :character 1)))
  156.  
  157. (defrecord ClippingAtom
  158.   (size :long)
  159.   (type :long)
  160.   (aRgnClip :RgnAtom))
  161.     
  162. (defrecord VideoMediaInfoHeader
  163.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  164.   (graphicsMode :short)                 ; /* for QD - transfer mode */
  165.   (opColorRed :short)                   ; /* opcolor for transfer mode */
  166.   (opColorGreen :short)
  167.   (opColorBlue :short))
  168.  
  169. (defrecord VideoMediaInfoHeaderAtom
  170.   (size :long)                          ; /* size of Media info */
  171.   (type :long)                          ; /* = 'vmhd' */
  172.   (vmiHeader :VideoMediaInfoHeader))
  173.  
  174. (defrecord VideoMediaInfo
  175.   (size :long)                          ; /* size of Media info */
  176.   (type :long)                          ; /* = 'minf' */
  177.   (header :VideoMediaInfoHeaderAtom)
  178.   (dataHandler :HandlerAtom)
  179.   (dataInfo :DataInfoAtom)
  180.   (sampleTable :SampleTableAtom))
  181.         
  182. (defrecord SoundMediaInfoHeader
  183.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  184.   (balance :short)
  185.   (rsrvd :short))
  186.  
  187. (defrecord SoundMediaInfoHeaderAtom
  188.   (size :long)                          ; /* size of Media info */
  189.   (type :long)                          ; /* = 'vmhd' */
  190.   (smiHeader :SoundMediaInfoHeader))
  191.  
  192. (defrecord SoundMediaInfo
  193.   (size :long)                          ; /* size of Media info */
  194.   (type :long)                          ; /* = 'minf' */
  195.   (header :SoundMediaInfoHeaderAtom)
  196.   (dataHandler :HandlerAtom)
  197.   (dataReference :DataRefAtom)
  198.   (sampleTable :SampleTableAtom))
  199.  
  200. (defrecord MediaInfo
  201.   (size :long)
  202.   (type :long)
  203.   ;/* whatever data the media handler needs goes here */
  204.   )
  205.  
  206. #|
  207. /***********************
  208. * Media Directory Structures 
  209. ***********************/    
  210. |#
  211.  
  212. (defrecord MediaHeader
  213.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  214.   (creationTime :long)                  ; /* seconds since Jan 1904 when directory was created */
  215.   (modificationTime :long)              ; /* seconds since Jan 1904 when directory was appended */
  216.   (timeScale :TimeValue)                ; /* start time for Media (Media time) */
  217.   (duration :TimeValue)                 ; /* length of Media (Media time) */
  218.   (language :short)
  219.   (quality :short))
  220.  
  221. (defrecord MediaHeaderAtom
  222.   (size :long)
  223.   (type :long)
  224.   (header :MediaHeader))
  225.  
  226. (defrecord MediaDirectory
  227.   (size :long)
  228.   (type :long)                          ; /* = 'mdia' */
  229.   (mediaHeader :MediaHeaderAtom)        ; /* standard Media information */
  230.   (mediaHandler :HandlerAtom)
  231.   (mediaInfo :MediaInfo))
  232.  
  233. #|
  234. /***********************
  235. * Track Structures 
  236. ***********************/    
  237. |#
  238.     
  239. (defconstant $TrackEnable (ash 1 0))
  240. (defconstant $TrackInMovie (ash 1 1))
  241. (defconstant $TrackInPreview (ash 1 2))
  242. (defconstant $TrackInPoster (ash 1 3))
  243.     
  244. (defrecord TrackHeader
  245.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  246.   (creationTime :long)                  ; /* seconds since Jan 1904 when directory was created */
  247.   (modificationTime :long)              ; /* seconds since Jan 1904 when directory was appended */
  248.   (trackID :long)
  249.   (reserved1 :long)
  250.   (duration :TimeValue)                 ; /* length of track (track time) */
  251.   (reserved2 :long)
  252.   (reserved3 :long)
  253.   (layer :short)
  254.   (alternateGroup :short)
  255.   (volume :short)
  256.   (reserved4 :short)
  257.   (matrix :MatrixRecord)
  258.   (trackWidth :Fixed)
  259.   (trackHeight :Fixed))
  260.         
  261. (defrecord TrackHeaderAtom
  262.   (size :long)                          ; /* size of track header */
  263.   (type :long)                          ; /* = 'tkhd' */
  264.   (header :TrackHeader))
  265.  
  266. (defrecord EditListType
  267.   (trackDuration :TimeValue)
  268.   (mediaTime :TimeValue)
  269.   (mediaRate :Fixed))
  270.  
  271. (defrecord EditListAtom
  272.   (size :long)
  273.   (type :long)                          ; /* = elst */
  274.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  275.   (numEntries :long)
  276.   (editListTable (:array :EditListType 1)))
  277.  
  278. (defrecord EditsAtom
  279.   (size :long)
  280.   (type :long)                          ; /* = edts */
  281.   (editList :EditListAtom))
  282.  
  283. (defrecord TrackDirectory
  284.   (size :long)
  285.   (type :long)                          ; /* = 'trak' */
  286.   (trackHeader :TrackHeaderAtom)        ; /* standard track information */
  287.   (trackClip :ClippingAtom)
  288.   (edits :EditsAtom)
  289.   (media :MediaDirectory)
  290.   (userData :UserDataAtom)              ; /* space for extending with new data types */
  291.   )
  292.  
  293. (defrecord MovieHeader
  294.   (flags :long)                         ; /* 1 byte of version / 3 bytes of flags */
  295.   (creationTime :long)                  ; /* seconds since Jan 1904 when directory was created */
  296.   (modificationTime :long)              ; /* seconds since Jan 1904 when directory was appended */
  297.  
  298.   ;/* Time specifications */
  299.   (timeScale :TimeValue)
  300.   (duration :TimeValue)
  301.   (preferredRate :Fixed)                ; /* rate at which to play this movie */
  302.   (preferredVolume :short)              ; /* volume to play movie at */
  303.   (reserved1 :short)
  304.  
  305.   ;/* Graphics specifications */
  306.   (reserved2 :long)
  307.   (reserved3 :long)
  308.   (matrix :MatrixRecord)
  309.     
  310.   (previewTime :TimeValue)              ; /* time in track the proxy begins (track time) */
  311.   (previewDuration :TimeValue)          ; /* how long the proxy lasts (track time) */
  312.   (posterTime :TimeValue)               ; /* time in track the proxy begins (track time) */
  313.   (selectionTime :TimeValue)            ; /* time in track the proxy begins (track time) */
  314.   (selectionDuration :TimeValue)        ; /* time in track the proxy begins (track time) */
  315.   (currentTime :TimeValue)              ; /* time in track the proxy begins (track time) */
  316.   (nextTrackID :long)                   ; /* next value to use for a TrackID */
  317.   )
  318.  
  319. (defrecord MovieHeaderAtom
  320.   (size :long)
  321.   (type :long)                          ; /* = 'mvhd' */
  322.   (header :MovieHeader))
  323.  
  324. (defrecord  MovieDirectory
  325.   (size :long)
  326.   (type :long)                          ; /* = 'moov' */
  327.   (header :MovieHeaderAtom)
  328.   (movieClip :ClippingAtom)
  329.     
  330.   ;/* Track Directories */
  331.   (track (:array :trackDirectory 1))
  332.  
  333.   ;/* User data for Movie */
  334.   (userData :UserDataAtom)              ; /* space for user extensions */
  335.   )
  336.  
  337. ;/* Movie formats and tags */
  338. ;/* some system defined format IDs */
  339. (defconstant $MOVIE_TYPE :|moov|)
  340. (defconstant $TRACK_TYPE :|trak|)
  341. (defconstant $MEDIA_TYPE :|mdia|)
  342. (defconstant $VIDEO_TYPE :|vide|)
  343. (defconstant $SOUND_TYPE :|soun|)
  344.  
  345. ;/* atom id's */
  346. (defconstant $MovieAID :|moov|)
  347. (defconstant $MovieHeaderAID :|mvhd|)
  348. (defconstant $ClipAID :|clip|)
  349. (defconstant $RgnClipAID :|crgn|)
  350. (defconstant $MatteAID :|matt|)
  351. (defconstant $MatteCompAID :|kmat|)
  352. (defconstant $TrackAID :|trak|)
  353. (defconstant $UserDataAID :|udta|)
  354. (defconstant $TrackHeaderAID :|tkhd|)
  355. (defconstant $EditsAID :|edts|)
  356. (defconstant $EditListAID :|elst|)
  357. (defconstant $MediaAID :|mdia|)
  358. (defconstant $MediaHeaderAID :|mdhd|)
  359. (defconstant $MediaInfoAID :|minf|)
  360. (defconstant $VideoMediaInfoHeaderAID :|vmhd|)
  361. (defconstant $SoundMediaInfoHeaderAID :|smhd|)
  362. (defconstant $DataInfoAID :|dinf|)
  363. (defconstant $DataRefAID :|dref|)
  364. (defconstant $SampleTableAID :|stbl|)
  365. (defconstant $STSampleDescAID :|stsd|)
  366. (defconstant $STTimeToSampAID :|stts|)
  367. (defconstant $STSyncSampleAID :|stss|)
  368. (defconstant $STSampleToChunkAID :|stsc|)
  369. (defconstant $HandlerAID :|hdlr|)
  370. (defconstant $STSampleSizeAID :|stsz|)
  371. (defconstant $STChunkOffsetAID :|stco|)
  372. (defconstant $DataRefContainerAID :|drfc|)
  373.